• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Problem z zmienną char

VPS Starter Arubacloud
0 głosów
307 wizyt
pytanie zadane 20 grudnia 2021 w Mikrokontrolery przez LisekPolska Początkujący (340 p.)
zamknięte 20 grudnia 2021 przez LisekPolska

Proszę o pomoc rozwiązaniu problemu z zmienną char w środowisku Arduino IDE

kod błędu to :

Arduino:1.8.18 (Windows Store 1.8.55.0) (Windows 10), Płytka:"Arduino Uno"


C:\Users\minec\Documents\Arduino\hc06\hc06.ino: In function 'void loop()':
hc06:47:9: error: 'state' was not declared in this scope
     if (state == '0') {
         ^~~~~
C:\Users\minec\Documents\Arduino\hc06\hc06.ino:47:9: note: suggested alternative: 'static'
     if (state == '0') {
         ^~~~~
         static
hc06:66:9: error: 'state' was not declared in this scope
     if (state == 70) {
         ^~~~~
C:\Users\minec\Documents\Arduino\hc06\hc06.ino:66:9: note: suggested alternative: 'static'
     if (state == 70) {
         ^~~~~
         static
C:\Users\minec\Documents\Arduino\hc06\hc06.ino: At global scope:
hc06:111:1: error: expected declaration before '}' token
 }
 ^
exit status 1
'state' was not declared in this scope


Ten raport powinien zawierać więcej informacji jeśli w 
File -> Preferencje zostanie włączona opcja "Pokaż
szczegółowe informacje podczas kompilacji"

#include <SoftwareSerial.h>
//#include "hardcar_ruch.h"
SoftwareSerial hcSerial(10, 11); // RX, TX
#define trig 12
#define echo 13
#define lewy1 7
#define lewy2 8
#define lewypwm 5
#define prawy1 2
#define prawy2 3
#define prawypwm 6
//#include <Servo.h>
//Servo myservo;


void przod();
void tyl();
void lewo();
void prawo();
void stop();


void setup() {
  // put your setup code here, to run once:

pinMode(lewy1, OUTPUT);
pinMode(lewy2, OUTPUT);
pinMode(lewypwm, OUTPUT);
pinMode(prawy1, OUTPUT);
pinMode(prawy2, OUTPUT);
pinMode(prawypwm, OUTPUT);
pinMode(echo, INPUT);
pinMode(trig, OUTPUT);

//myservo.attach(11);
 Serial.begin(9600); // hardware serial for the USB-PC
  hcSerial.begin(9600);  // software serial Arduino to HC-06 (9600 is default)
}

void loop() {
    if (hcSerial.available()) {
      //startUp = 1;
      char state;  // tu deklaruję zmienną
      state = hcSerial.read();   / /tu ustawiam wartość zmiennej na odczyt z Software serial port  3 linia kodu
    }
    int vSpeed;
    if (state == '0') {    // tu jest błąd
      vSpeed = 0;
    }
    else if (state == '1') {
      vSpeed = 100;
    }
    else if (state == '2') {
      vSpeed = 180;
    }
    else if (state == '3') {
      vSpeed = 200;
    }
    else if (state >= '4') {
      vSpeed = 255;
    }
    // vSpeed = 255;
    analogWrite(lewypwm,  vSpeed);
    analogWrite(prawypwm,  vSpeed);
    /***********************Forward****************************/
    if (state == 70) {   //tu jest bład
      przod();
    }
    /***********************Backward****************************/
    else if (state == 'B') {
      tyl();
    }
    /***************************Left*****************************/
    else if (state == 'L') {
      prawo();
    }
    /***************************Right*****************************/
    else if (state == 'R') {
      lewo();
    }
    /************************Stop*****************************/
    else if (state == 'S') {
      stop();
    } else {
      stop();
    }
  }
}
void przod() {
  analogWrite(lewypwm, 255);
  analogWrite(prawypwm, 255);
  digitalWrite(lewy1, HIGH);
  digitalWrite(lewy2, LOW);
  digitalWrite(prawy1, HIGH);
  digitalWrite(prawy2, LOW);
}
void tyl() {
  analogWrite(lewypwm, 255);
  analogWrite(prawypwm, 255);
  digitalWrite(lewy1, LOW);
  digitalWrite(lewy2, HIGH);
  digitalWrite(prawy1, LOW);
  digitalWrite(prawy2, HIGH);
}
void lewo() {
  analogWrite(lewypwm, 100);
  analogWrite(prawypwm, 255);
  digitalWrite(lewy1, HIGH);
  digitalWrite(lewy2, LOW);
  digitalWrite(prawy1, HIGH);
  digitalWrite(prawy2, LOW);
}
void prawo() {
  analogWrite(lewypwm, 255);
  analogWrite(prawypwm, 100);
  digitalWrite(lewy1, HIGH);
  digitalWrite(lewy2, LOW);
  digitalWrite(prawy1, HIGH);
  digitalWrite(prawy2, LOW);
  }
void stop() {
  analogWrite(lewypwm, 255);
  analogWrite(prawypwm, 255);
  digitalWrite(lewy1, LOW);
  digitalWrite(lewy2, LOW);
  digitalWrite(prawy1, LOW);
  digitalWrite(prawy2, LOW);
}
  
 


 

 

 

 

 

komentarz zamknięcia: Rozwiązałem dzięki podpowiedzią problem musiałem usunąć klamerkę z linii 45 (wrzucić to do tego samego ifa)

2 odpowiedzi

+2 głosów
odpowiedź 20 grudnia 2021 przez Oscar Nałogowiec (29,290 p.)
wybrane 20 grudnia 2021 przez LisekPolska
 
Najlepsza
Po prostu przenieś definicje zmiennej state z linii 43 o dwie linijki wyżej i już. Jak deklarujesz zmienną w klamerkach to jest ona widoczna tylko wewnątrz tych klamerek.
komentarz 20 grudnia 2021 przez LisekPolska Początkujący (340 p.)
Tak dzięki musiałem to wrzucić do tamtego ifa
+1 głos
odpowiedź 20 grudnia 2021 przez wizarddos Nałogowiec (25,130 p.)

Z błędów wynika że zmienna nie jest w zasięgu. Może wrzuć te ify do tego ifa gdzie masz deklarację state? Czyli coś takiego:

 

void loop() {
    if (hcSerial.available()) {
      //startUp = 1;
      char state;  // tu deklaruję zmienną
      state = hcSerial.read();   / /tu ustawiam wartość zmiennej na odczyt z Software serial port  3 linia kodu
      int vSpeed;
      if (state == '0') {    // tu jest błąd
        vSpeed = 0;
      }
      else if (state == '1') {
        vSpeed = 100;
      }
      else if (state == '2') {
        vSpeed = 180;
      }
      else if (state == '3') {
        vSpeed = 200;
      }
      else if (state >= '4') {
        vSpeed = 255;
      }
    // vSpeed = 255;
      analogWrite(lewypwm,  vSpeed);
      analogWrite(prawypwm,  vSpeed);
    /***********************Forward****************************/
      if (state == 70) {   //tu jest bład
        przod();
      }
    /***********************Backward****************************/
      else if (state == 'B') {
        tyl();
      }
    /***************************Left*****************************/
      else if (state == 'L') {
        prawo();
      }
    /***************************Right*****************************/
      else if (state == 'R') {
        lewo();
      }
    /************************Stop*****************************/
      else if (state == 'S') {
        stop();
      } else {
        stop();
      }
  }
}

 

komentarz 20 grudnia 2021 przez LisekPolska Początkujący (340 p.)
Tak dzięki musiałem to wrzucić do tamtego ifa

Podobne pytania

0 głosów
0 odpowiedzi 119 wizyt
0 głosów
2 odpowiedzi 322 wizyt
0 głosów
2 odpowiedzi 136 wizyt
pytanie zadane 14 stycznia 2021 w C i C++ przez Miki Bywalec (2,480 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...