• 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

Object Storage Arubacloud
0 głosów
323 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,930 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 122 wizyt
0 głosów
2 odpowiedzi 323 wizyt
0 głosów
2 odpowiedzi 138 wizyt
pytanie zadane 14 stycznia 2021 w C i C++ przez Miki Bywalec (2,480 p.)

92,555 zapytań

141,404 odpowiedzi

319,557 komentarzy

61,940 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...